// 键盘输入一个长度为len（1 <= len < 30）的字符串，再输入一个正整数 m（1 <= m <= len），将此字
// 符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串，并将这个新字符串输出。要求用指针
// 处理字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LEN 50

int get_strlen(char *str);
void my_strcpy(char *str1, char *str2, int m);

int main(int argc, char **argv)
{
    char *str1 = NULL;
    int m = 0;
    char *str2 = NULL;

    // 申请空间
    str1 = (char *)malloc(LEN * sizeof(char));
    if (str1 == NULL)
    {
        perror("str_malloc");
        goto ERROR;
    }

    // 清理空间
    memset(str1, 0, LEN);

    // 获取键盘输入
    printf("输入一段字符串\n");
    fgets(str1, LEN * sizeof(char), stdin);
    str1[get_strlen(str1) - 1] = '\0';

    // 获取pos
    printf("输入pos\n");
    scanf("%d", &m);

    // 判断有效
    if (m < 0 || m > get_strlen(str1) - 1)
    {
        goto ERROR;
    }

    // 申请拷贝空间
    str2 = (char *)calloc(get_strlen(str1) + 1, sizeof(char));
    if (str2 == NULL)
    {
        perror("str_calloc");
        goto ERROR;
    }

    // 拷贝
    my_strcpy(str2, str1, m);

    // 输出验证
    printf("%s\n", str2);

    // 释放空间
    if (str1 != NULL && str2 != NULL)
    {
        free(str1);
        free(str2);
    }

    return 0;

ERROR:
    return 1;
}

int get_strlen(char *str)
{   
    int cnt = 0;


    while (str[cnt] != '\0')
    {
        cnt++;
    }

    return cnt;
}

void my_strcpy(char *str1, char *str2, int m)
{
    while (str2[m] != '\0')
    {
        *str1 = str2[m];
        m++;
        str1++;
    }
    *str1 = '\0';

    return;
}